﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using Follow.Utils;
using Follow.Model;
using System.Transactions;
using Follow.Common;

namespace Follow.DataAccess
{
    public class GrupoFuncionalidadeDAO
    {
        private SqlDataReader reader = null;
        private SqlConnection conn = null;
        private SqlCommand cmd = null;

        public GrupoFuncionalidadeDAO()
        {
            conn = ConnectionUtils.getConnection();
        }

        public IList<GrupoFuncionalidade> findByGrupo(Int32 id)
        {
            IList<GrupoFuncionalidade> gf = new List<GrupoFuncionalidade>();
            try
            {
                conn.Open();
                String sqlCommand = @" select gf.idgrupofunc, gf.grupo_idgrupo, gf.funcionalidade_idfuncionalidade,
                                        g.descricao descricaoGrupo, f.descricao descricaoFuncionalidade, f.url
                                        from grupofunc gf, grupo g, funcionalidade f
                                        where gf.funcionalidade_idfuncionalidade = f.idfuncionalidade and 
	                                        gf.grupo_idgrupo = g.idgrupo and gf.grupo_idgrupo = @id ";
                cmd = new SqlCommand(sqlCommand, conn);

                cmd.Parameters.Add(new SqlParameter("id", id));



                reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    GrupoFuncionalidade grupofunc = new GrupoFuncionalidade();
                    grupofunc.IDGrupoFuncionalidade = reader.GetInt32(0);
                    grupofunc.IDGrupo = reader.GetInt32(1);
                    grupofunc.IDFuncionalidade = reader.GetInt32(2);
                    grupofunc.DescricaoGrupo = reader.GetString(3);
                    grupofunc.DescricaoFuncionalidade = reader.GetString(4);
                    grupofunc.UrlFuncionalidade = reader.GetString(5);
                    gf.Add(grupofunc);
                }

            }
            catch (Exception ex)
            { 
            
            }
            finally
            {
                if (reader != null)
                {
                    reader.Close();
                }

                if (conn != null)
                {
                    conn.Close();
                }
            }
            return gf;
        }

        public void insert(GrupoFuncionalidade gf, int idUsuario)
        {
            String sqlCommand;
            try
            {
                conn.Open();
                sqlCommand = (@"insert into grupofunc 
                                      ([funcionalidade_idfuncionalidade], [grupo_idgrupo]) 
                                      values 
                                      (@idFunc, @idGrupo) ");

                cmd = new SqlCommand(sqlCommand, conn);

                cmd.Parameters.Add(new SqlParameter("@idfunc", gf.IDFuncionalidade));
                cmd.Parameters.Add(new SqlParameter("@idgrupo", gf.IDGrupo));
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {

            }
            finally
            {
                if (reader != null)
                {
                    reader.Close();
                }
                if (conn != null)
                {
                    conn.Close();
                }
            }
            LogDAO log = new LogDAO();
            log.insert(idUsuario, Common.SQLStringSingleton.GetCommandText(cmd), "Insert", "Associar Cliente com Funcionalidade");
        }

        public void delete(int id)
        {
            throw new NotImplementedException();
        }

        public void deleteByGrupo(int id)
        {
            throw new NotImplementedException();
        }

        public IList<GrupoFuncionalidade> findByFuncionalidade(Int32 id)
        {
            IList<GrupoFuncionalidade> gf = new List<GrupoFuncionalidade>();
            try
            {
                conn.Open();
                String sqlCommand = @" select gf.idgrupofunc, gf.grupo_idgrupo, gf.funcionalidade_idfuncionalidade,
                                        g.descricao descricaoGrupo, f.descricao descricaoFuncionalidade, f.url
                                        from grupofunc gf, grupo g, funcionalidade f
                                        where gf.funcionalidade_idfuncionalidade = f.idfuncionalidade and 
	                                        gf.grupo_idgrupo = g.idgrupo and gf.funcionalidade_idfuncionalidade = @id ";
                cmd = new SqlCommand(sqlCommand, conn);

                cmd.Parameters.Add(new SqlParameter("id", id));



                reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    GrupoFuncionalidade grupofunc = new GrupoFuncionalidade();
                    grupofunc.IDGrupoFuncionalidade = reader.GetInt32(0);
                    grupofunc.IDGrupo = reader.GetInt32(1);
                    grupofunc.IDFuncionalidade = reader.GetInt32(2);
                    grupofunc.DescricaoGrupo = reader.GetString(3);
                    grupofunc.DescricaoFuncionalidade = reader.GetString(4);
                    grupofunc.UrlFuncionalidade = reader.GetString(5);
                    gf.Add(grupofunc);
                }

            }
            catch (Exception ex)
            {

            }
            finally
            {
                if (reader != null)
                {
                    reader.Close();
                }

                if (conn != null)
                {
                    conn.Close();
                }
            }
            return gf;
        }
    }





}